package com.warom.sdg.dao;

import com.warom.sdg.model.GrainSituationEntity;

import java.util.List;

/**
 * 粮情数据访问对象接口
 */
public interface GrainSituationDao {
    
    /**
     * 插入单条粮情数据
     * @param grainSituation 粮情数据实体
     * @return 插入后的ID
     */
    long insert(GrainSituationEntity grainSituation);
    
    /**
     * 批量插入粮情数据
     * @param grainSituations 粮情数据实体列表
     * @return 插入后的ID列表
     */
    List<Long> insertAll(List<GrainSituationEntity> grainSituations);
    
    /**
     * 更新粮情数据
     * @param grainSituation 粮情数据实体
     */
    void update(GrainSituationEntity grainSituation);
    
    /**
     * 删除粮情数据
     * @param grainSituation 粮情数据实体
     */
    void delete(GrainSituationEntity grainSituation);
    
    /**
     * 获取指定时间范围内的所有粮情数据
     * @param startTime 开始时间戳
     * @param endTime 结束时间戳
     * @return 粮情数据列表
     */
    List<GrainSituationEntity> getGrainSituationByTimeRange(long startTime, long endTime);
    
    /**
     * 获取指定电缆在指定时间范围内的粮情数据
     * @param cableNo 电缆编号
     * @param startTime 开始时间戳
     * @param endTime 结束时间戳
     * @return 粮情数据列表
     */
    List<GrainSituationEntity> getGrainSituationByCableAndTimeRange(int cableNo, long startTime, long endTime);
    
    /**
     * 获取指定电缆指定名称在指定时间范围内的粮情数据
     * @param cableNo 电缆编号
     * @param cableName 电缆名称
     * @param startTime 开始时间戳
     * @param endTime 结束时间戳
     * @return 粮情数据列表
     */
    List<GrainSituationEntity> getGrainSituationByCableNameAndTimeRange(int cableNo, String cableName, long startTime, long endTime);
    
    /**
     * 获取所有电缆的最新粮情数据
     * @return 粮情数据列表
     */
    List<GrainSituationEntity> getLatestGrainSituation();
    
    /**
     * 获取指定电缆的最新粮情数据
     * @param cableNo 电缆编号
     * @return 粮情数据列表
     */
    List<GrainSituationEntity> getLatestGrainSituationByCable(int cableNo);
    
    /**
     * 清空粮情数据表
     */
    void deleteAll();
    
    /**
     * 删除指定时间之前的粮情数据
     * @param timestamp 时间戳
     * @return 删除的记录数
     */
    int deleteDataBeforeTime(long timestamp);
    
    /**
     * 获取粮情数据总数
     * @return 记录总数
     */
    int getCount();
    
    /**
     * 获取不同电缆的数量
     * @return 电缆数量
     */
    int getCableCount();
    
    /**
     * 获取所有电缆编号
     * @return 电缆编号列表
     */
    List<Integer> getAllCableNumbers();
} 